Ext.onReady(function ()
{
	//获得数据store
	var termData = Ext.create('Ext.data.Store',
		{
			model : 'TermModel',
			proxy :
			{
				type : 'ajax',
				url : basePath + 'term/GetTermList',
				reader :
				{
					type : 'json',
					root : 'root'
				}
			},
			autoLoad : true
		}
		);
	//数据填充入combobox

	//学期combobox
	var termBox = Ext.create('Ext.form.ComboBox',
		{
			fieldLabel : '学年:',
			emptyText : '请选择',
			labelWidth : 100,
			width : 400,
			labelAlign : "right",
			store : termData,
			queryMode : 'local',
			editable : false,
			disable : true,
			displayField : 'name',
			valueField : 'term_id',
			blankText : '不能为空',
			allowBlank : false,
			listeners :
			{
				'select' : function ()
				{
					loadWeek(termBox.getValue());
				}
			}
		}
		);

	//获得数据store
	function loadWeek(tid)
	{
		//重新获得一个store，这样比较麻烦，但是很管用
		weekBox.store.removeAll();
		weekData = Ext.create('Ext.data.Store',
			{
				model : 'WeekModel',
				proxy :
				{
					type : 'ajax',
					url : basePath + 'term/getWeekList?tid=' + tid,
					reader :
					{
						type : 'json',
						root : 'root'
					}
				},
				autoLoad : true
			}
			);
		//bindStore被标记为不安全的用法，但是能有效解决不能显示重新绑定的store的问题
		weekBox.bindStore(weekData);
		weekBox.clearValue();
	}

	var weekData = Ext.create('Ext.data.Store',
		{
			model : 'WeekModel',
			proxy :
			{
				type : 'ajax',
				url : basePath + 'term/getWeekList?tid=0',
				reader :
				{
					type : 'json',
					root : 'root'
				}
			},
			autoLoad : true
		}
		);
	//数据填充入combobox
	var weekBox = Ext.create('Ext.form.ComboBox',
		{
			fieldLabel : '周次:',
			emptyText : '请选择',
			labelWidth : 100,
			width : 400,
			labelAlign : "right",
			store : weekData,
			queryMode : 'local',
			editable : false,
			displayField : 'week_describe',
			valueField : 'week_id',
			blankText : '不能为空',
			allowBlank : false,
			listeners :
			{
				'select' : function ()
				{
					loadAllAppointmentGrid(termBox.getValue(), weekBox.getValue()); //获取id对应学年
				}
			}
		}
		);

	//获得数据store
	var roomData = Ext.create('Ext.data.Store',
		{
			model : 'RoomModel',
			proxy :
			{
				type : 'ajax',
				url : basePath + 'room/getRoomList',
				reader :
				{
					type : 'json',
					root : 'root'
				}
			},
			autoLoad : true
		}
		);

	Ext.QuickTips.init();

	//创建表格,可以加入更多的属性。
	var tmp = Ext.getCmp('showAllAppointmentGrid');
	if (tmp != null)
		tmp.destroy();
	var showAllAppointmentGrid = Ext.create("Ext.grid.Panel",
		{
			title : '【点击相应位置可以进行预约】',
			id : 'showAllAppointmentGrid',
			name : 'showAllAppointmentGrid',
			sortable : false,
			stripeRows : true,
			enableHdMenu : false,
			enableColumnHide : false,
			selType : 'cellmodel',
			loadMask : true,
			columnLines : true,
			columns : [], //注意此行代码，至关重要
			displayInfo : true,
			emptyMsg : "没有数据显示",
			viewConfig :
			{
				forceFit : true
			},
			listeners :
			{
				'select' : function (selModel, record, row, column, eOpts)
				{
					if (column < 2)
						return;

					var AllAppointmentInfoText = new Ext.panel.Panel(
						{
							frame : false,
							title : '',
							html : ''
						}
						);

					var showAppointBox = Ext.create("Ext.form.FormPanel",
						{
							frame : false,
							bodyPadding : 10,
							defaultType : 'textfield',
							autoScroll : true,
							defaults :
							{
								anchor : '100%',
								labelWidth : 50,
								labelAlign : "right"
							},
							items : [
								AllAppointmentInfoText
							],
							buttons : [
								{
									text : '确定',
									handler : function ()
									{
										if (showAppointBox.getForm().isValid())
										{
											showWindow.close();
										}
									}
								},
							]
						}
						);

					var showWindow = Ext.create('Ext.window.Window',
						{
							title : '预约',
							height : 350,
							width : 400,
							layout : 'fit',
							modal : true,
							closeAction : 'hide',
							items : [showAppointBox]
						}
						);
					Ext.Ajax.request(
					{
						url : basePath + 'appointment/getAllAppointment?tid=' + termBox.getValue() + '&wid=' + weekBox.getValue() + '&rid=' + showAllAppointmentGrid.getView().getHeaderCt().getHeaderAtIndex(column).dataIndex + '&period=' + row,
						method : 'POST',
						success : function (response)
						{
							var json = Ext.JSON.decode(response.responseText);
							if (json.success)
							{
								AllAppointmentInfoText.setTitle(json.title);
								AllAppointmentInfoText.html = json.res;

								showWindow.show();
							}
							else
							{
								return;
							}
						}
					}
					)
				}
			}
		}
		);

	//显示主窗体
	tmp = Ext.getCmp('ShowAllAppointmentPanel');
	if (tmp != null)
		tmp.destroy();
	var ShowAllAppointmentPanel = Ext.create("Ext.form.FormPanel",
		{
			title : '预约表',
			frame : false,
			defaultType : 'textfield',
			renderTo : 'showAllAppointmentDiv',
			defaults :
			{
				labelWidth : 100,
				labelAlign : "right"
			},
			items : [
				termBox,
				weekBox,
				showAllAppointmentGrid
			]
		}
		);

	//通过ajax获取表头、表格数据
	function loadAllAppointmentGrid(tid, wid)
	{
		Ext.Ajax.request(
		{
			url : basePath + 'appointment/GetAllAppointmentGrid?term_id=' + tid + '&week_id=' + wid, //从json文件中读取数据，也可以从其他地方获取数据
			method : 'POST',
			success : function (response)
			{
				//将返回的结果转换为json对象，注意extjs4中decode函数已经变成了：Ext.JSON.decode
				var json = Ext.JSON.decode(response.responseText); //获得后台传递json

				//创建store
				var store = Ext.create('Ext.data.Store',
					{
						fields : json.fields, //把json的fields赋给fields
						data : json.data //把json的data赋给data
					}
					);

				//根据store和column构造表格
				Ext.getCmp('showAllAppointmentGrid').reconfigure(store, json.columns);
				//重新渲染表格
				//Ext.getCmp('showAllAppointmentGrid').render();
			}
		}
		);
	}
}
);
